home *** CD-ROM | disk | FTP | other *** search
/ System Booster / System Booster.iso / Archives / Timing / clock1_2.lha / clock1_2 / progargs.h < prev    next >
C/C++ Source or Header  |  1994-05-16  |  2KB  |  53 lines

  1. /* progargs - a simple, extensible package for handling command line
  2.  * arguments and tooltypes.
  3.  *
  4.  * Copyright © 1993 by Peter Schachte
  5.  *
  6.  * I hereby grant everyone the right to use this code for any purpose
  7.  * whatsoever, so long as this copyright notice remains intact.
  8.  */
  9.  
  10. struct arg_descriptor {
  11.     char *name;        /* argument name for cmd line and tooltypes */
  12.     int (*parser)(char *, void *, void **);
  13.             /* function to parse value part of this arg and */
  14.             /* store the result in specified location */
  15.     void *extra_parse_arg; /* extra (2nd) arg passed to parser() function */
  16.     int value_allowed;    /* option can be specified with a value?  If false, */
  17.             /* then parser() must not look at its first arg */
  18.     void **variable;    /* variable to set when option is specified */
  19. };
  20.  
  21. /* Parse the command line args or tooltypes.  The first two args are
  22.  * the argc and argv as passed to main().  The third arg is an array
  23.  * of arg_descriptor structs.  The easiest way to build one of these
  24.  * is as a static array initialized with the help of the macros below.
  25.  */
  26.  
  27. void handle_args(int argc, char **argv, struct arg_descriptor *args);
  28.  
  29. /* This must be called just before exiting the program, to allow
  30.  * cleanup of resources allocated by handle_args().
  31.  */
  32.  
  33. void handle_args_finish(void);
  34.  
  35.  
  36. /* These shouldn't be called directly, they are used by the macros below */
  37. int parse_int_arg(char *string, void *extra, void **value);
  38. int parse_string_arg(char *string, void *extra, void **value);
  39. int parse_bool_arg(char *string, void *extra, void **value);
  40.  
  41. /* specify an integer argument named name, whose value is in var */
  42. #define INT_ARG(name, var) \
  43.     { (name), parse_int_arg, NULL, 1, (void *)(&(var)) }
  44. /* specify a string argument named name, whose value is in var */
  45. #define STRING_ARG(name, var) \
  46.     { (name), parse_string_arg, NULL, 1, (void *)(&(var)) }
  47. /* specify a boolean argument named name.  var is pos when name is specified
  48.  * and !pos when NOname is specified.
  49.  */
  50. #define BOOL_ARG(name, var, pos) \
  51.     { name, parse_string_arg, (void*)(pos), 0, (void *)(&(var)) }, \
  52.     { "NO" name, parse_string_arg, (void*)!(pos), 0, (void *)(&(var)) }
  53.